// 输入文字最大的个数
const MAX_WORDS_NUM = 140
// 最大上传图片数量
const MAX_IMG_NUM = 9
const db = wx.cloud.database()
// 输入的文字内容
let content = ''
let userInfo = {}
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 输入的文字个数
    wordsNum: 0,
    // 添加图片元素是否显示
    selectPhoto: true,
    footerBottom: 0,
    images: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // console.log(options)
    userInfo = options
  },
  // 选择图片事件
  onChooseImage() {
    // 还能选择图片的个数
    let max = MAX_IMG_NUM - this.data.images.length
    wx.chooseImage({
      // 还能选择图片的个数
      count: max,
      // 图片的类型 原始图片 压缩后的
      sizeType: ['original', 'compressed'],
      // 源头类型 相册 相机
      sourceType: ['album', 'camera'],
      success: (res) => {
        // console.log(res)
        this.setData({
          images: this.data.images.concat(res.tempFilePaths)
        })
        // 还能再选几张图片
        max = MAX_IMG_NUM - this.data.images.length
        this.setData({
          selectPhoto: max <= 0 ? false : true
        })

      },
    })
  },
  onInput(e) {
    console.log(e.detail.value)
    let wordsNum = e.detail.value.length
    if (wordsNum >= MAX_WORDS_NUM) {
      wordsNum = `最大字数为${MAX_WORDS_NUM}`      
    }
    this.setData({
      wordsNum
    })
    content = e.detail.value
  },
  onFocus(e) {
    // 键盘弹起 发布按钮上移
    // console.log(e.height)
    // 获取高度
    this.setData({
      footerBottom: e.height
    })
  },
  onBlur() {
    this.setData({
      footerBottom: 0
    })
  },
  // 图片预览事件
  onPreviewImage(e) {
    // ios上会显示 6/9
    wx.previewImage({
      // 预览的图片列表
      urls: this.data.images,
      // 当前要预览的图片
      current: e.target.dataset.imgsrc
    })
  },
  // 删除图片
  onDelImage(e) {
    // console.log(e.target.dataset.index)
    // 返回的是所删除的图片
    this.data.images.splice(e.target.dataset.index, 1)
    this.setData({
      images: this.data.images
    })
    if (this.data.images.length == MAX_IMG_NUM -1) {
      this.setData({
        selectPhoto: true,
      })
    }
  },
  send() {
    // trim()去掉空格
    if(content.trim() === '') {
      wx.showModal({
        title: '请输入内容',
        content: '',
      })
      return
    }

    wx.showLoading({
      title: '发布中',
      mask: true,
    })

    let promiseArr = [] 
    // 所有成功的FileId 
    let fileIds = []  
    // 简化图片上传 把数据存储到云数据库中 每次上传一张 异步 图片上传完成后才存储到云数据库
    for (let i = 0, len = this.data.images.length; i < len; i++) {
      let p = new Promise((resolve, reject) => {
        // 文件路径
        let item = this.data.images[i]
        // 文件扩展名 \转义  \w数组字母下划线  $结尾
        let suffix = /\.\w+$/.exec(item)[0]
        wx.cloud.uploadFile({
          // cloudPath 上传到云端的路径 文件夹名称blog （唯一） suffix扩展名
          cloudPath: 'blog/' + Date.now() + '-' + Math.random() * 1000000 + suffix,
          // 文件的临时路径
          filePath: item,
          success: (res) => {
            console.log(res)
            fileIds = fileIds.concat(res.fileID)
            resolve()
          },
          fail: (err) => {
            console.error(err)
            reject()
          }
        })        
      })
      promiseArr.push(p)
    }
    // 存储到云数据库
    Promise.all(promiseArr).then((res) => {
      db.collection('blog').add({
        data: {
          // _openid会自动插入
          ...userInfo,
          content,
          img: fileIds,
          createTime: db.serverDate(), // 服务端的时间
        }
      })
      .then((res) => {
        wx.hideLoading()
        wx.showToast({
          title: '发布成功',
        })
        // 返回blog 并刷新 调用blog页面的下拉刷新事件
        wx.navigateBack()
        // 取父页面并调用父页面的方法
        const pages = getCurrentPages()
        // 取父页面
        const prevPage = pages[pages.length - 2]
        // 调用父元素的方法实现刷新
        prevPage.onPullDownRefresh()
      })
    }).catch((err) => {
      wx.hideLoading()
      wx.showToast({
        title: '发布失败',
      })
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})